package com.zhuiyun.project.api.system.role.service;

import com.zhuiyun.project.api.system.role.entity.SysRole;
import com.zhuiyun.project.api.system.user.entity.SysUserRole;
import com.zhuiyun.project.common.response.CommonResult;
import com.zhuiyun.project.utils.pageUtil.PageRequest;
import com.zhuiyun.project.utils.pageUtil.PageResult;

import java.util.List;
import java.util.Set;

/**
 * 角色业务层
 * 
 * @author ruoyi
 */
public interface SysRoleService
{
   /**
   * @Author hbx
   * @Description 根据条件分页查询角色数据
   * @Date 2023/6/22 9:58
   * @param pageRequest
   * @param sysRole
   */
    PageResult selectRoleList(PageRequest pageRequest, SysRole sysRole);

   /**
   * @Author hbx
   * @Description 根据用户ID查询角色列表
   * @Date 2023/6/22 9:59
   * @param userId
   */
    public List<SysRole> selectRolesByUserId(Long userId);

    /**
    * @Author hbx
    * @Description 根据用户ID查询角色权限
    * @Date 2023/6/22 9:59
    * @param userId
    */
    public Set<String> selectRolePermissionByUserId(Long userId);

    /**
    * @Author hbx
    * @Description 查询所有角色
    * @Date 2023/6/22 9:59

    */
    public List<SysRole> selectRoleAll();

    /**
    * @Author hbx
    * @Description 根据用户ID获取角色选择框列表
    * @Date 2023/6/22 9:59
    * @param userId
    */
    public List<Long> selectRoleListByUserId(Long userId);

    /**
    * @Author hbx
    * @Description 通过角色ID查询角色
    * @Date 2023/6/22 9:59
    * @param roleId
    */
    public SysRole selectRoleById(Long roleId);

    /**
    * @Author hbx
    * @Description 校验角色名称是否唯一
    * @Date 2023/6/22 9:59
    * @param role
    */
    public boolean checkRoleNameUnique(SysRole role);

    /**
    * @Author hbx
    * @Description 校验角色权限是否唯一
    * @Date 2023/6/22 9:59
    * @param role
    */
    public boolean checkRoleKeyUnique(SysRole role);

   /**
   * @Author hbx
   * @Description 校验角色是否允许操作
   * @Date 2023/6/22 9:59
   * @param role
   */
    public void checkRoleAllowed(SysRole role);

   /**
   * @Author hbx
   * @Description 校验角色是否有数据权限
   * @Date 2023/6/22 10:00
   * @param roleId
   */
    public void checkRoleDataScope(Long roleId);

   /**
   * @Author hbx
   * @Description 通过角色ID查询角色使用数量
   * @Date 2023/6/22 10:00
   * @param roleId
   */
    public int countUserRoleByRoleId(Long roleId);

    /**
    * @Author hbx
    * @Description 新增保存角色信息
    * @Date 2023/6/22 10:00
    * @param role
    */
    public int insertRole(SysRole role);

    /**
    * @Author hbx
    * @Description 修改保存角色信息
    * @Date 2023/6/22 10:00
    * @param role
    */
    public int updateRole(SysRole role);


    /**
    * @Author hbx
    * @Description 通过角色ID删除角色
    * @Date 2023/6/22 10:00
    * @param roleId
    */
    public int deleteRoleById(Long roleId);

    /**
    * @Author hbx
    * @Description 批量删除角色信息
    * @Date 2023/6/22 10:00
    * @param roleIds
    */
    public CommonResult deleteRoleByIds(Long[] roleIds);



    /**
    * @Author hbx
    * @Description 修改角色状态
    * @Date 2023/6/22 10:00
    * @param role
    */
    public int updateRoleStatus(SysRole role);



    /**
    * @Author hbx
    * @Description 取消授权用户角色
    * @Date 2023/6/22 10:00
    * @param userRole
    */
    public int deleteAuthUser(SysUserRole userRole);

    /**
    * @Author hbx
    * @Description 批量取消授权用户角色
    * @Date 2023/6/22 10:01
    * @param roleId
    * @param userIds
    */
    public int deleteAuthUsers(Long roleId, Long[] userIds);

    /**
    * @Author hbx
    * @Description 批量选择授权用户角色
    * @Date 2023/6/22 10:01
    * @param roleId
    * @param userIds
    */
    public int insertAuthUsers(Long roleId, Long[] userIds);


}
